/**
 *
 * @author Tom Baeyens
 * @author (Javascript) Dmitry Farafonov
 */

var ActivityImpl = function (activityJson) {
  this.outgoingTransitions = [];
  this.outgoingTransitions = [];
  this.incomingTransitions = [];
  this.activityBehavior = null;
  this.parent = null;
  this.isScope = false;
  this.isAsync = false;
  this.isExclusive = false;
  this.x = -1;
  this.y = -1;
  this.width = -1;
  this.height = -1;
  this.properties = {};

  //console.log("activityJson: ", activityJson);

  if (activityJson != undefined) {
    this.setId(activityJson.activityId);

    for (var propertyName in activityJson.properties) {
      this.setProperty(propertyName, activityJson.properties[propertyName]);
    }
    //this.setProperty("name", activityJson.activityName);
    //this.setProperty("type", activityJson.activityType);
    this.setX(activityJson.x);
    this.setY(activityJson.y);
    this.setWidth(activityJson.width);
    this.setHeight(activityJson.height);

    if (activityJson.multiInstance) this.setProperty('multiInstance', activityJson.multiInstance);
    if (activityJson.collapsed) {
      this.setProperty('collapsed', activityJson.collapsed);
    }
    if (activityJson.isInterrupting != undefined) this.setProperty('isInterrupting', activityJson.isInterrupting);
  }
};

ActivityImpl.prototype = {
  outgoingTransitions: [],
  outgoingTransitions: [],
  incomingTransitions: [],
  activityBehavior: null,
  parent: null,
  isScope: false,
  isAsync: false,
  isExclusive: false,

  id: null,

  properties: {},

  // Graphical information
  x: -1,
  y: -1,
  width: -1,
  height: -1,

  setId: function (id) {
    this.id = id;
  },

  getId: function () {
    return this.id;
  },

  setProperty: function (name, value) {
    this.properties[name] = value;
  },
  getProperty: function (name) {
    return this.properties[name];
  },

  createOutgoingTransition: function (transitionId) {},

  toString: function (id) {
    return 'Activity(' + id + ')';
  },

  getParentActivity: function () {
    /*
		if (parent instanceof ActivityImpl) {
79       return (ActivityImpl) parent;
80     }
81     return null;
	*/
    return this.parent;
  },

  // restricted setters ///////////////////////////////////////////////////////

  setOutgoingTransitions: function (outgoingTransitions) {
    this.outgoingTransitions = outgoingTransitions;
  },

  setParent: function (parent) {
    this.parent = parent;
  },

  setIncomingTransitions: function (incomingTransitions) {
    this.incomingTransitions = incomingTransitions;
  },

  // getters and setters //////////////////////////////////////////////////////

  getOutgoingTransitions: function () {
    return this.outgoingTransitions;
  },

  getActivityBehavior: function () {
    return this.activityBehavior;
  },

  setActivityBehavior: function (activityBehavior) {
    this.activityBehavior = activityBehavior;
  },

  getParent: function () {
    return this.parent;
  },

  getIncomingTransitions: function () {
    return this.incomingTransitions;
  },

  isScope: function () {
    return this.isScope;
  },

  setScope: function (isScope) {
    this.isScope = isScope;
  },

  getX: function () {
    return this.x;
  },

  setX: function (x) {
    this.x = x;
  },

  getY: function () {
    return this.y;
  },

  setY: function (y) {
    this.y = y;
  },

  getWidth: function () {
    return this.width;
  },

  setWidth: function (width) {
    this.width = width;
  },

  getHeight: function () {
    return this.height;
  },

  setHeight: function (height) {
    this.height = height;
  },

  isAsync: function () {
    return this.isAsync;
  },

  setAsync: function (isAsync) {
    this.isAsync = isAsync;
  },

  isExclusive: function () {
    return this.isExclusive;
  },

  setExclusive: function (isExclusive) {
    this.isExclusive = isExclusive;
  },

  vvoid: function () {},
};
